package com.example.online_chat.api;

import com.example.online_chat.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class MessageSessionAPI {
    @Autowired
    private MessageSessionMapper messageSessionMapper;

    @Autowired
    private MessageMapper messageMapper;

    @GetMapping("/sessionList")
    public Object getSessionList(@SessionAttribute("user") User user) {
        List<MessageSession> resp = new ArrayList<>();

        List<Integer> sessionIdList = messageSessionMapper.getSessionIdByUserId(user.getUserId());

        for (int sessionId : sessionIdList) {
            MessageSession messageSession = new MessageSession();
            messageSession.setSessionId(sessionId);
            List<Friend> friends = messageSessionMapper.getFriendsBySessionId(sessionId, user.getUserId());
            messageSession.setFriends(friends);
            String lastMessage = messageMapper.getLastMessageBySessionId(sessionId);

            if (lastMessage != null) {
                messageSession.setLastMessage(lastMessage);
            } else {
                messageSession.setLastMessage("");
            }
            resp.add(messageSession);
        }
        return resp;
    }

    @PostMapping("/session")
    @Transactional
    public Object createSession(int toUserId, @SessionAttribute("user") User user) {
        Map<String, Integer> resp = new HashMap<>();

        MessageSession messageSession = new MessageSession();
        messageSessionMapper.addMessageSession(messageSession);

        MessageSessionUser user1 = new MessageSessionUser();
        MessageSessionUser user2 = new MessageSessionUser();

        user1.setSessionId(messageSession.getSessionId());
        user2.setSessionId(messageSession.getSessionId());

        user1.setUserId(user.getUserId());
        user2.setUserId(toUserId);

        messageSessionMapper.addMessageSessionUser(user1);
        messageSessionMapper.addMessageSessionUser(user2);

        System.out.println("[addMessageSession] 新增会话成功! sessionId = " + messageSession.getSessionId()
                + "userId1 = " + user.getUserId() + " userId2 = " + toUserId);

        resp.put("sessionId", messageSession.getSessionId());
        return resp;
    }
}
